浅谈pytorch中为什么要用zero | 您所在的位置:网站首页 › pytorch 梯度累加 › 浅谈pytorch中为什么要用zero |
浅谈 pytorch 中为什么要⽤ zero_grad ()将梯度清零 pytorch 中为什么要⽤ zero_grad() 将梯度清零 调⽤ backward() 函数之前都要将梯度清零,因为如果梯度不清零, pytorch 中会将上次计算的梯度和本次计算的梯度累加。 这样逻辑的好处是,当我们的硬件限制不能使⽤更⼤的 bachsize 时,使⽤多次计算较⼩的 bachsize 的梯度平均值来代替,更⽅ 便,坏处当然是每次都要清零梯度。 optimizer.zero_grad() output = net(input) loss = loss_f(output, target) loss.backward() 补充: Pytorch 为什么每⼀轮 batch 需要设置 optimizer.zero_grad CSDN 上有⼈写过原因,但是其实写得繁琐了。 根据 pytorch 中的 backward() 函数的计算,当⽹络参量进⾏反馈时,梯度是被积累的⽽不是被替换掉;但是在每⼀个 batch 时毫 ⽆疑问并不需要将两个 batch 的梯度混合起来累积,因此这⾥就需要每个 batch 设置⼀遍 zero_grad 了。 其实这⾥还可以补充的⼀点是,如果不是每⼀个 batch 就清除掉原有的梯度,⽽是⽐如说两个 batch 再清除掉梯度,这是⼀种变 相提⾼ batch_size 的⽅法,对于计算机硬件不⾏,但是 batch_size 可能需要设⾼的领域⽐较适合,⽐如⽬标检测模型的训练。 关于这⼀点可以 关于 backward() 的计算可以 补充: pytorch 踩坑笔记之 w.grad.data.zero_() 在使⽤ pytorch 实现多项线性回归中,在 grad 更新时,每⼀次运算后都需要将上⼀次的梯度记录清空,运⽤如下⽅法 : w.grad.data.zero_() b.grad.data.zero_() |
CopyRight 2018-2019 实验室设备网 版权所有 |